#include "sqliteoperator.h"


/*
 * @func:新建一个数据库
 * @feature:自由
 * @param：name用户指定的数据库名字
*/
SqliteOperator::SqliteOperator(const QString &db_name)
{
    if (QSqlDatabase::contains("qt_sql_default_connection"))
    {
        m_db = QSqlDatabase::database("qt_sql_default_connection");
    }
    else
    {
        // 建立和SQlite数据库的连接
        m_db = QSqlDatabase::addDatabase("QSQLITE");
        // 设置数据库文件的名字
        m_db.setDatabaseName(db_name);
    }

}


/*
 * @func:打开当前对象的数据库
 * @feature:自由
*/
bool SqliteOperator::open_db()
{
    if (!m_db.open())
    {
        qDebug() << "Error: Failed to connect database." << m_db.lastError();
    }
    else
    {
        qDebug() << "Open database.";
    }
    return true;
}


/*
 * @func:删掉数据库中的某个表
 * @feature:自由
*/
void SqliteOperator::delete_tbl(const QString &tableName)
{
    QSqlQuery query;
    QString deleteTableQuery = QString("DROP TABLE IF EXISTS %1").arg(tableName);
    if (query.exec(deleteTableQuery)) {
        qDebug() << "Table deleted successfully.";
    } else {
        qDebug() << "Error: Failed to delete table.";
    }
}

/*
 * @func:关闭数据库
 * @feature:自由
*/
void SqliteOperator::close_db()
{
    m_db.close();
    qDebug() << "close success";
}


/*
 * @func:在当前数据库中新建表
 * @feature:自由，但需自己写sql语句
*/
void SqliteOperator::create_tbl(const QString &createtbl_sql)
{
    // 用于执行sql语句的对象
    QSqlQuery sqlQuery;
#if 0
    // 构建创建数据库的sql语句字符串
    QString createSql = QString("CREATE TABLE student (\
                          id INT PRIMARY KEY NOT NULL,\
                          name TEXT NOT NULL,\
                          age INT NOT NULL)");
#endif
    sqlQuery.prepare(createtbl_sql);
    // 执行sql语句
    if(!sqlQuery.exec())
    {
        qDebug() << "Error: Fail to create table. " << sqlQuery.lastError();
    }
    else
    {
        qDebug() << "Table created!";
    }
}


/*
 * @func:查询数据库中有没有特定的表
 * @param：tbl_name 表名
 * @feature：自由
*/
bool SqliteOperator::is_tbl_exisit(const QString &tbl_name)
{
    QSqlDatabase database = QSqlDatabase::database();//这句话什么意思？？
    if(database.tables().contains(tbl_name))
    {
        return true;
    }

    return false;
}


void SqliteOperator::single_insert_data(epyRcd &rcd)
{
    QSqlQuery sqlQuery;
   // sqlQuery.prepare("INSERT INTO employee VALUES(:epyid,:faceid,:name,:sex,:part,:phone)");
    sqlQuery.prepare("INSERT INTO employee VALUES(:face_id,:name,:sex,:part,:phone)");

    //sqlQuery.bindValue(":epyid", 0);
    sqlQuery.bindValue(":face_id", rcd.m_faceID);
    sqlQuery.bindValue(":name", rcd.m_name);
    sqlQuery.bindValue(":sex", rcd.m_sex);
    sqlQuery.bindValue(":part", rcd.m_part);
    sqlQuery.bindValue(":phone", rcd.m_phone);

    if(!sqlQuery.exec())
    {
        qDebug() << "Error: Fail to insert data. " << sqlQuery.lastError();
    }
    else
    {
        qDebug() << "singleInsert.";
    }

}


/*
 * @func:查询数据库中所有记录
 * @feature:不自由，需要直到记录的属性的数目和数据类型
*/
void SqliteOperator::query_whole_tbl(const QString& tbl_name)
{
    QString qstr = QString("SELECT * FROM %1").arg(tbl_name);
    QSqlQuery sqlQuery(qstr);
    sqlQuery.exec();
    if(!sqlQuery.exec())
    {
        qDebug() << "Error: Fail to query table. " << sqlQuery.lastError();
    }
    else
    {
        while(sqlQuery.next())
        {
            #if 0 //此处，对于不同的表，有不同之处
            int id = sqlQuery.value(0).toInt();
            QString name = sqlQuery.value(1).toString();
            int age = sqlQuery.value(2).toInt();
            qDebug()<<QString("id:%1    name:%2    age:%3").arg(id).arg(name).arg(age);
            #endif
        }
    }
}


/*
 * @func:构建一个SQL语句
 * @param:参数是vector<>
*/
void build_create_sql()
{

}














